undo log、redo log、binlog 有什么用?

4 分钟阅读 414 字 + 456 词
redolog_binlog
参考答案:
  • undo log Innodb 存储引擎层 生成的日志,实现了 事务中的原子性,主要用于事务回滚和 MVCC
  • redo log Innodb 存储引擎层 生成的 物理日志,记录了某个数据页做了什么修改,每当执行一个事务就会产生一条或者多条物理日志 ,并且redo log是 采用顺序写 ,效率更好,写满了后又回到开头进行写,如果在buffer pool中修改数据直接写回磁盘的话,是一个随机写,效率就不高了,并且还引入了 redo log buffer(实现组提交),具体就是先写入这个buffer中,然后再通过刷盘 ( 0:每隔一秒写入,1:提交时就刷盘,2:写入系统缓存pagecache (这个pagecache和mysql不是同一个进程),由操作系统调度fsync),redo log主要是恢复事务数据的( 崩溃恢复 ), 保证持久性 的。
  • binlog (归档日志)是整个mysql的** Server 生成的 逻辑日志**,记录所有日志,主要用于**数据备份和主从复制。**binlog也可以设置参数实现刷盘( 0:每次提交事务只write,每隔一秒刷盘,1:提交时写入刷盘,N:写入系统缓存pagecache,积累N次事务再刷盘)。
你要对 undo log、redo log 的必要性有深刻理解。因为面试官可能会问出一些反直觉的问题。
没有 undo log 会怎样? 没有 undo log 就没有后悔药,没有办法回滚。
没有 redo log 会怎样? 没有 redo log 的话,写到 buffer pool,宕机了就会丢失数据。
为什么非得引入 redo log,干嘛不直接修改数据? 直接修改数据就是随机写,性能极差。